#include "Component.h"
#include <vector>
#include <algorithm>
namespace CompositeMode
{
    class Composite:public Component
    {
    public:
        Composite()
        {

        }

        virtual void add(Component* c) 
        {
            _componentArr.push_back(c);
        }

        virtual void remove(Component* c) 
        {
            auto itor = std::find(_componentArr.begin(),_componentArr.end(),c);
            if(itor != _componentArr.end())
            {
                _componentArr.erase(itor);
            }
        }

        virtual Component* getChild(int i) 
        {
            return _componentArr.at(i);
        }

        virtual void operation() 
        {
            for(auto it:_componentArr)
            {
                it->operation();
            }
        }     

    private:
        std::vector<Component*> _componentArr;
    };
}